﻿/**
 * Created in 2012-2-23.
 */
package kit4j.view.cs.awt.image;

import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;

import kit4j.common.converter.Converter;

/**
 * Image对象到BufferedImage对象的转换器。
 * 
 * @author MiniKnife
 * 
 */
public class ImageToBufferedImageConverter implements
		Converter<Image, BufferedImage> {

	/**
	 * 默认的图像类型。值为BufferedImage.TYPE_INT_RGB。
	 */
	private static final int DEFAULT_IMAGE_TYPE = BufferedImage.TYPE_INT_RGB;

	/**
	 * 使用默认的图像类型通过将一个Image对象转换为BufferedImage对象。
	 * 
	 * @param image
	 *            Image对象
	 * @return 通过指定的Image对象构建的BufferedImage对象
	 * @see kit4j.common.converter.Converter#convert(java.lang.Object)
	 */
	@Override
	public BufferedImage convert(Image image) {
		return convert(image, DEFAULT_IMAGE_TYPE);
	}

	/**
	 * 使用指定的图像类型通过将一个Image对象转换为BufferedImage对象。 type的值应该为以下常量之一：
	 * BufferedImage.TYPE_INT_RGB, BufferedImage.TYPE_INT_ARGB,
	 * BufferedImage.TYPE_INT_ARGB_PRE, BufferedImage.TYPE_INT_BGR,
	 * BufferedImage.TYPE_3BYTE_BGR, BufferedImage.TYPE_4BYTE_ABGR,
	 * BufferedImage.TYPE_4BYTE_ABGR_PRE, BufferedImage.TYPE_BYTE_GRAY,
	 * BufferedImage.TYPE_BYTE_BINARY, BufferedImage.TYPE_BYTE_INDEXED,
	 * BufferedImage.TYPE_USHORT_GRAY, BufferedImage.TYPE_USHORT_565_RGB,
	 * BufferedImage.TYPE_USHORT_555_RGB, BufferedImage.TYPE_CUSTOM
	 * 
	 * @param image
	 *            Image对象
	 * @param imageType
	 *            图像类型
	 * @return 通过指定的图像类型和Image对象构建的BufferedImage对象
	 */
	public BufferedImage convert(Image image, int imageType) {
		return convert(image, DEFAULT_IMAGE_TYPE, null);
	}

	/**
	 * 使用指定的图像类型通过将一个Image对象转换为BufferedImage对象。 type的值应该为以下常量之一：
	 * BufferedImage.TYPE_INT_RGB, BufferedImage.TYPE_INT_ARGB,
	 * BufferedImage.TYPE_INT_ARGB_PRE, BufferedImage.TYPE_INT_BGR,
	 * BufferedImage.TYPE_3BYTE_BGR, BufferedImage.TYPE_4BYTE_ABGR,
	 * BufferedImage.TYPE_4BYTE_ABGR_PRE, BufferedImage.TYPE_BYTE_GRAY,
	 * BufferedImage.TYPE_BYTE_BINARY, BufferedImage.TYPE_BYTE_INDEXED,
	 * BufferedImage.TYPE_USHORT_GRAY, BufferedImage.TYPE_USHORT_565_RGB,
	 * BufferedImage.TYPE_USHORT_555_RGB, BufferedImage.TYPE_CUSTOM
	 * 
	 * @param image
	 *            Image对象
	 * @param imageType
	 *            图像类型
	 * @param observer
	 *            Image对象的ImageObserver
	 * @return 通过指定的图像类型和Image对象构建的BufferedImage对象
	 */
	public BufferedImage convert(Image image, int imageType, ImageObserver observer) {
		BufferedImage bufferedImage = new BufferedImage(image.getWidth(observer),
				image.getHeight(observer), imageType);
		Graphics2D g = bufferedImage.createGraphics();
		
		g.drawImage(image, null, observer);
		
		return bufferedImage;
	}

}
